package com.hahaliu.hahaliu.task;

import com.hahaliu.hahaliu.common.utils.RedisUtil;
import com.hahaliu.hahaliu.mapper.VideoMapper;
import com.hahaliu.hahaliu.pojo.entity.Video;
import com.hahaliu.hahaliu.service.video.VideoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;

@Component
@Slf4j
public class ScheduledTask {

	@Autowired
	private RedisUtil redisUtil;

	@Autowired
	private VideoMapper videoMapper;

	@Autowired
	@Qualifier("taskExecutor")
	private Executor taskExecutor;

//	@Scheduled(cron = "*/10 * * * * *")
//	public void testTask() {
//		log.info("更新视频id集合执行中 - 每 10 秒执行一次");
//		// 获取所有状态为1的视频id
//		List<Integer> vIds = videoMapper.getVIds(1);
//		// 从redis中删除原本有的所有id
//		redisUtil.deleteKeysWithPrefix("video_status:1");
//		// 添加所有的id
//		vIds.forEach(vid -> redisUtil.addMember("video_status:1:", vid));
//	}

//	@Scheduled(cron = "*/10 * * * * *")
//	public void testTask() {
//		log.info("更新视频id集合执行中 - 每 10 秒执行一次");
//		// 获取所有视频
//		List<Video> videoList = videoMapper.listAll();
//		videoList.forEach(video -> {
//			// 确定状态，默认为3
//			int status = video.getStatus() >= 0 && video.getStatus() <= 3 ? video.getStatus() : 3;
//			String statusKey = "video_status:" + status;
//
//			// 并行执行所有Redis操作
//			CompletableFuture.allOf(
//					CompletableFuture.runAsync(() ->
//									redisUtil.setExObjectValue("video:" + video.getVId(), video),
//							taskExecutor),
//					CompletableFuture.runAsync(() ->
//									redisUtil.addMember(statusKey, video.getVId()),
//							taskExecutor),
//					CompletableFuture.runAsync(() ->
//									redisUtil.setExObjectValue("videoStats:" + video.getVId(), video),
//							taskExecutor)
//			).exceptionally(ex -> {
//				log.error("同步视频数据到Redis失败: videoId={}", video.getVId(), ex);
//				return null;
//			});
//		});
//	}

//	@Scheduled(cron = "*/10 * * * * *")
//	public void testTask() {
//		log.info("更新视频id集合执行中 - 每 10 秒执行一次");
//		// 获取所有视频
//		List<Video> videoList = videoMapper.listAll();
//		videoList.forEach(video -> {
//			redisUtil.zset("user_video_upload:" + video.getUId(), video.getVId());
//			if (video.getStatus() == 0) {
//				System.out.println(0);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("video:" + video.getVId(), video), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.addMember("video_status:0", video.getVId()), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("videoStats:" + video.getVId(), video), taskExecutor);
//			} else if (video.getStatus() == 1) {
//				System.out.println(1);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("video:" + video.getVId(), video), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.addMember("video_status:1", video.getVId()), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("videoStats:" + video.getVId(), video), taskExecutor);
//			} else if (video.getStatus() == 2) {
//				System.out.println(2);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("video:" + video.getVId(), video), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.addMember("video_status:2", video.getVId()), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("videoStats:" + video.getVId(), video), taskExecutor);
//			} else if (video.getStatus() == 3) {
//				System.out.println(3);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("video:" + video.getVId(), video), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.addMember("video_status:3", video.getVId()), taskExecutor);
//				CompletableFuture.runAsync(() -> redisUtil.setExObjectValue("videoStats:" + video.getVId(), video), taskExecutor);
//			}
//		});
//	}


	// 每一个小时执行一次更新视频id合集
//	@Scheduled(cron = "0 0 * * * *")
//	public void updateVideoIds() {
//		// 存储到 Redis 时，将 Integer 转换为 String
//		List<Integer> vIds = videoMapper.getVIds(1);
//		redisUtil.deleteKeysWithPrefix("video_status:1");
//		vIds.forEach(vid -> redisUtil.addMember("video_status:1", String.valueOf(vid)));  // 转换为 String
//
//		// 从 Redis 获取数据后，将 String 转换为 Integer
//		Set<Object> set = redisUtil.getMembers("video_status:1");
//		Set<Integer> vIdsSet = set.stream()
//				.map(obj -> Integer.parseInt((String) obj))  // 反序列化为 Integer
//				.collect(Collectors.toSet());
//		vIdsSet.forEach(System.out::println);  // 打印所有 Integer 值
//	}

}
